home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok72.lha / while-Interpreter / Source / QuadTester.MOD < prev    next >
Text File  |  1993-08-15  |  4KB  |  138 lines

  1. (******************************
  2.  * Programm von Dieter Seidel *
  3.  *  Eingegeben am 26.11.1991  *
  4.  *  Ergaenzt   am 27.11.1991  *
  5.  ******************************)
  6.  
  7. (* Dieses Modul laedt ein paar while-Programme in den String 'BefehlsListe' *
  8.  * und laesst daraus dann die Quadrupel-Form bestimmen.                     *
  9.  * Die letzten beiden Programme sind sogar sinnvoll, weshalb bei diesen     *
  10.  * dann auch noch der Interpreter getestet wird.                            *)
  11.  
  12.  
  13. IMPLEMENTATION MODULE QuadTester;
  14.  
  15. FROM InOut            IMPORT WriteCard, WriteLn, WriteString;
  16. FROM QuadLese         IMPORT MaxBefehle, arrList, arrQuad;
  17. FROM QuadBerechneQuad IMPORT BerechneQuad;
  18. FROM QuadDrucke       IMPORT Drucke;
  19. FROM QuadInterpreter  IMPORT Interpreter;
  20.  
  21.  
  22. VAR Feld : ARRAY [1..30] OF CHAR;
  23.  
  24.  
  25. PROCEDURE VereinigeStrings(VAR BefehlsListe : arrList; Position : CARDINAL);
  26. VAR i : CARDINAL;
  27. BEGIN
  28.   FOR i:=Position TO Position + 30 DO
  29.     IF i > MaxBefehle THEN
  30.       WriteLn;
  31.       WriteString("Fehler in QuadTester!!! Erhoehe MaxBefehle.");
  32.       WriteLn;
  33.       HALT;
  34.     END;
  35.     BefehlsListe[i]:=Feld[i-Position+1];
  36.   END;
  37. END VereinigeStrings;
  38.  
  39.  
  40. PROCEDURE ZeigeTest(Counter : CARDINAL; BefehlsListe : arrList);
  41. VAR QuadListe    : arrQuad;
  42. BEGIN
  43.   WriteString("Testeingabe Nr.: ");
  44.   WriteCard(Counter,1);WriteLn;
  45.   WriteString(BefehlsListe);WriteLn;
  46.   BerechneQuad(BefehlsListe,QuadListe);
  47.   Drucke(BefehlsListe,QuadListe);
  48.   WriteLn;
  49. END ZeigeTest;
  50.  
  51.  
  52. PROCEDURE ZeigeTestInter(Counter : CARDINAL; BefehlsListe : arrList);
  53. VAR QuadListe    : arrQuad;
  54. BEGIN
  55.   WriteString("Testeingabe Nr.: ");
  56.   WriteCard(Counter,1);WriteLn;
  57.   WriteString(BefehlsListe);WriteLn;
  58.   BerechneQuad(BefehlsListe,QuadListe);
  59.   Drucke(BefehlsListe,QuadListe);
  60.   Interpreter(QuadListe);
  61.   WriteLn;
  62. END ZeigeTestInter;
  63.  
  64.  
  65. PROCEDURE Tester() : BOOLEAN;
  66. VAR Counter      : CARDINAL;
  67.     BefehlsListe : arrList;
  68. BEGIN
  69.   Counter:=1;
  70.   BefehlsListe:="bX1:X2;X2:2;X3:0;X4:s(X4);X5:p(X2)e";
  71.   ZeigeTest(Counter,BefehlsListe);INC(Counter);
  72.   
  73.   BefehlsListe:="bwX1#X2dbX1:X2;X2:s(X2);X1:s(X1)ee";
  74.   ZeigeTest(Counter,BefehlsListe);INC(Counter);
  75.  
  76.   Feld:="bwX1#X2dbwX2#X3dbX1:X2;wX3#X4d";
  77.   VereinigeStrings(BefehlsListe,1);
  78.   Feld:="wX4#X5dX1:p(X1);eX1:X2;wX1#X2d";
  79.   VereinigeStrings(BefehlsListe,31);
  80.   Feld:="X1:X8;X1:123ee";
  81.   VereinigeStrings(BefehlsListe,61);
  82.   ZeigeTest(Counter,BefehlsListe);INC(Counter);
  83.  
  84.   Feld:="bwX1#X2dbwX2#X3dbX1:X2wX3#X4dw";
  85.   VereinigeStrings(BefehlsListe,1);
  86.   Feld:="X4#X5dX1:p(X1);X88:X99eX1:X2wX";
  87.   VereinigeStrings(BefehlsListe,31);
  88.   Feld:="1#X2dX1:X8X1:123ee";
  89.   VereinigeStrings(BefehlsListe,61);
  90.   ZeigeTest(Counter,BefehlsListe);INC(Counter);
  91.  
  92.   Feld:="bwX1#X2dwX3#X4dbwX5#X7dX1:X2;e";
  93.   VereinigeStrings(BefehlsListe,1);
  94.   Feld:="X1:99wX1#X2dwX1#X3dwX2#X3dbX1:";
  95.   VereinigeStrings(BefehlsListe,31);
  96.   Feld:="2;wX3#X4dX1:X2;X2:1wX1#X2dbwX2";
  97.   VereinigeStrings(BefehlsListe,61);
  98.   Feld:="#X3dbwX3#X4dbX1:3;X2:7eeeX1:X7";
  99.   VereinigeStrings(BefehlsListe,91);
  100.   Feld:="ee";
  101.   VereinigeStrings(BefehlsListe,121);
  102.   ZeigeTest(Counter,BefehlsListe);INC(Counter);
  103.  
  104.   WriteString("Das folgende Programm berechnet das Produkt X1:=X1*X2.");
  105.   WriteLn;
  106.   Feld:="bX1:5;X2:7;X3:0;X4:X1;X5:X2;wX";
  107.   VereinigeStrings(BefehlsListe,1);
  108.   Feld:="5#0dbX5:p(X5);X3:s(X3)eX4:p(X4";
  109.   VereinigeStrings(BefehlsListe,31);
  110.   Feld:=");wX4#0dbX5:X2;wX5#0dbX5:p(X5)";
  111.   VereinigeStrings(BefehlsListe,61);
  112.   Feld:=";X3:s(X3)eX4:p(X4)eX1:X3e";
  113.   VereinigeStrings(BefehlsListe,91);
  114.   ZeigeTestInter(Counter,BefehlsListe);INC(Counter);
  115.  
  116.   WriteString("Das folgende Programm berechnet die Division mit Rest.");
  117.   WriteString(" Also 47 = X3 * 7 + X1.");
  118.   WriteLn;
  119.   Feld:="bX1:47;X2:7;X3:0;X4:X1;X4:s(X4";
  120.   VereinigeStrings(BefehlsListe,1);
  121.   Feld:=");X6:X2;wX6#0dbX4:p(X4);X6:p(X";
  122.   VereinigeStrings(BefehlsListe,31);
  123.   Feld:="6)e;wX4#0dbX6:X2;wX6#0dbX1:p(X";
  124.   VereinigeStrings(BefehlsListe,61);
  125.   Feld:="1);X6:p(X6)e;X3:s(X3);X4:X1;X4";
  126.   VereinigeStrings(BefehlsListe,91);
  127.   Feld:=":s(X4);X6:X2;wX6#0dbX4:p(X4);X";
  128.   VereinigeStrings(BefehlsListe,121);
  129.   Feld:="6:p(X6)eee";
  130.   VereinigeStrings(BefehlsListe,151);
  131.   ZeigeTestInter(Counter,BefehlsListe);INC(Counter);
  132.   
  133.   RETURN TRUE;                     (* Es sind keine Fehler aufgetreten. *)
  134. END Tester;
  135.  
  136.  
  137. END QuadTester.
  138.